<?php
class AOrdenDespachoLiquidos {


	public function continuaOrden (EFacade & $facade)
	{

		$docODL = & $facade->getDocumentRoot();
		$workflow = & $facade->getWorkflow();
		$docODL->solicitudLiquido->epGetClass();
		
		$role=NULL;
		
		///*******ojo asi se debe llamar la solicitud de liquidos iniciada por la
		///*******la orden de inspeccion
		
		if($docODL->solicitudLiquido->epGetClass() == 'SolicitudLiquidosIns'){
			if(count($ordenI = & $docODL->solicitudLiquido->OrdenInspeccion)){
				$docOT = & $ordenI->ordenTrabajo;
				$workflowOT = & $ordenI->ordenTrabajo->getWorkflowRef();
				$facade->session->refresh($workflowOT);
				$newEfacade = & EFacade :: initWorkflowWithoutRole($facade->session, $docOT, /* MTrans :: $TYPE_AUTO_PROCESS */ 3);
				$transSetOT = & EFacade :: getCurrentTransSetAuto($workflowOT, /* MTrans :: $TYPE_AUTO_PROCESS */ 3);
		
				
				if($transOT = $transSetOT->getTransByName('t3')){
					
					
					$newEfacade->fireTrans($transOT, $role, "continuar",TRUE);
					//echo "<br><br>termina el firetrans de Despacho";
					$docOT->epSetDirty(TRUE);// marcar el documento para que sea salvado los cambios en su lista de items
					$workflowOT->epSetDirty(TRUE);
					//echo "coloca dirty";
					$newEfacade->saveWorkflow();
					
					unset($newEfacade);
				}
				
			}		
		}
		
		$transSet = & EFacade :: getCurrentTransSetAuto( $workflow, MTrans :: $TYPE_AUTO_AGENT);	
		$transOT = $transSet->getTransByName('t4');
//		if($trans == NULL) {
//			throw new Exception ('Transaccion is NULL en : archivo '.__FILE__ ,' ; linea ', __LINE__);
//		}
//		
		$facade->fireTrans($transOT,$role,'culminar',TRUE);
		$workflow->epSetDirty(TRUE);
		$facade->saveWorkflow();
	}
	
	public function descuentoInventario (EFacade & $facade)
	{
		$docODL = & $facade->getDocumentRoot();
		$workflow = & $facade->getWorkflow();
		$docODL->solicitudLiquido->epGetClass();
		$continuar = 1;
		$cant = 0;
		foreach($docODL->listaLiquidosSolicitud as & $liquidos){			
			foreach($liquidos->producto->producto->productos as & $producto){
				foreach($producto->instanciasProducto as & $instancia){
					if($cant == 0){
						$cant = $liquidos->cantidadFinal;
					}
					
					foreach($instancia->almacenadoEn as & $Almacenes){
						$Almacenes->epSetDirty(TRUE);
						if($continuar){
							$cantidadReal = $instancia->cantidadReal();
							$cant = $Almacenes->cantidad - $cant;
							if($cant >= 0){
								$Almacenes->cantidad = $Almacenes->cantidad - $liquidos->cantidadFinal;
							}
							else{
								$Almacenes->cantidad = 0;
							}
							$continuar = 0;
							
						}else
						
							if($cant < 0){
								$cant1 = $cant * -1;
								$cantidadReal = $instancia->cantidadReal();
								$cant = $Almacenes->cantidad - $cant1;
								if($cant >= 0){
									$Almacenes->cantidad = $Almacenes->cantidad - $cant1;
								}
								else{
									$Almacenes->cantidad = 0;
								}
								
							
//								$continuar = 0;
//								if($cant > 0){
//									
//									break;
//								}
								
							}
							$Almacenes;
					}
					$Almacenes->commit();
						$instancia;
						
						
				}
				$continuar=TRUE;
				$cant = 0;
			}
			
		}
		//die;
		$role=NULL;
		
		$transSet = & EFacade :: getCurrentTransSetAuto( $workflow, MTrans :: $TYPE_AUTO_AGENT);	
		$transOT = $transSet->getTransByName('t6');

		$facade->fireTrans($transOT,$role,'culminar',TRUE);
		$workflow->epSetDirty(TRUE);
		$facade->saveWorkflow();
		
	}
}
?>